AWS Database Migration Serviceでテーブル名やカラム名を変えて移行する方法を試しました
DMSでデータを移行する際にソースとターゲットでテーブル名やカラム名を変える方法を調べて試してみました。 今回はMySQLからRedshiftへの移行で名前は以下のように変更するとします。
MySQL | Redshift | |
---|---|---|
スキーマ名 | mydb | test |
テーブル名 | table_1 | table_A |
カラム名 | column_1 | column_A |
column_2 | column_B | |
column_3 | column_C |
ソースとなるMySQLには以下のテーブルを作成しました。サンプルのデータもあります。
create table mydb.table_1( column_1 int, column_2 varchar(255), column_3 timestamp ); insert into mydb.table_1 values(1, 'abc', '2017-01-02 01:23:45'); insert into mydb.table_1 values(2, 'def', '2017-03-04 01:23:45'); insert into mydb.table_1 values(3, 'ghi', '2017-05-06 01:23:45');
タスクの設定画面の下の方にあるテーブルマッピングという項目があります。まず最初にどのテーブルを対象とするかの選択ルールを設定すると変換ルールを設定できるようになります。テキストボックスやプルダウンでルールを設定することもできるのですが、今回はガイドを使わずJSONタブを開いてルールを設定します。
上の表の条件をJSONにしたものです。最初のルール(3行目~12行目)は移行する対象に関するルールですが、14行目からはスキーマのリネーム、テーブルのリネーム、カラムのリネームに関するルールです。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "mydb", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "schema", "object-locator": { "schema-name": "mydb" }, "value": "test" }, { "rule-type": "transformation", "rule-id": "3", "rule-name": "3", "rule-action": "rename", "rule-target": "table", "object-locator": { "schema-name": "mydb", "table-name": "table_1" }, "value": "table_A" }, { "rule-type": "transformation", "rule-id": "4", "rule-name": "4", "rule-action": "rename", "rule-target": "column", "object-locator": { "schema-name": "mydb", "table-name": "table_1", "column-name" : "column_1" }, "value": "column_A" }, { "rule-type": "transformation", "rule-id": "5", "rule-name": "5", "rule-action": "rename", "rule-target": "column", "object-locator": { "schema-name": "mydb", "table-name": "table_1", "column-name" : "column_2" }, "value": "column_B" }, { "rule-type": "transformation", "rule-id": "6", "rule-name": "6", "rule-action": "rename", "rule-target": "column", "object-locator": { "schema-name": "mydb", "table-name": "table_1", "column-name" : "column_3" }, "value": "column_C" } ] }
保存してタスクを開始するとRedshift側にテーブルが作成されデータが入っていると思います。 もう一度タスクの設定画面を開くと以下のようにガイドに選択ルールと変換ルールが表示されているのが確認できます。
JSONの項目の意味を詳しく知りたい方は以下のドキュメントをご覧ください。